home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / amber / amber.lha / ObjectList.h < prev    next >
C/C++ Source or Header  |  1991-04-25  |  2KB  |  47 lines

  1. #ifndef _ObjectList_h
  2. #define _ObjectList_h
  3. #include "NamedObject.h"
  4. //
  5. // ListedObjects live in doubly-linked lists called ObjectLists.  The class
  6. // ObjectList and the base class ListedObject define the data and functions
  7. // required for maintenance of the lists.  Functions are provided to treat
  8. // the list as a queue.  Actual object contents are the responsibility of a
  9. // derived class of ListedObject.
  10. //
  11. // Note that ListedObjects are NamedObjects.  The two classes are orthogonal
  12. // and many ListedObjects will not need the characteristics of NamedObjects,
  13. // but we don't have multiple inheritance so we just do what we can.
  14. //
  15. // Warning:  Threads are ListedObjects.  The offsets of fields in class Thread
  16. // are known to asm code in Switch.s and are dependent upon the length
  17. // of the ListedObject structure.  If you change this class you must fix the
  18. // offsets in Switch().
  19. //
  20.  
  21. struct ListedObject : public NamedObject {
  22.     ListedObject *next;
  23.     ListedObject *prev;
  24.     ListedObject(int t=0, char* n=0);
  25. };
  26.  
  27. //
  28. // ObjectList probably should have inline versions of Append and Get
  29. // at least, for use with the thread ready list.
  30. //
  31.  
  32. class ObjectList : public NamedObject {
  33.     ListedObject *head;
  34.     ListedObject *tail;
  35. public:
  36.     ObjectList(ListedObject* head = 0);
  37.     ListedObject* Get();        // from head of queue
  38.     ListedObject* LookAt();        // non-destructive Get
  39.     void Append(ListedObject* ol);    // to end of queue
  40.     void Prepend(ListedObject* ol);    // to head of queue
  41.     int Remove(ListedObject* ol);    // remove arbitrary element
  42.     int    Empty()
  43.         { return head == 0; }
  44.     virtual void Print(ostream& = cout);
  45. };
  46. #endif _ObjectList_h
  47.